<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class M_Causa extends Modelo {

    public $id = null;
    public $deptoJudicialId;
    public $fueroId;
    public $usuarioId;
    public $fechaInicio;
    public $lugarActo;
    public $descripcion;
    public $fechaPrecentacion;
    public $partidoHechoId;
    public $montoPesos;
    public $montoDolares;
    public $muerte;
    public $lesion;
    public $finalizada;
    public $valoracion;
    public $observacion;

    function __construct() {
        parent::__construct();
        $this->tabla = 'causas';
    }

    function setAttributes($datos = array(), $tipo = 'object') {
        return parent::_setAttributes(__CLASS__, $datos, $tipo);
    }

    function doArray() {
        return parent::_doArray(__CLASS__);
    }

    /**
     * Devuelve valores por defecto en un arreglo.
     */
    function getValidacion() {
        $valid = array(
            array('field' => 'deptoJudicialId', 'label' => 'Depto Judicial', 'rules' => 'trim|required'),
            array('field' => 'fueroId', 'label' => 'Fueros', 'rules' => 'trim|required'),
            array('field' => 'fechaInicio', 'label' => 'Fecha del Hecho', 'rules' => 'trim|required'),
            array('field' => 'lugarActo', 'label' => 'Lugar del Acto', 'rules' => 'trim|required'),
            array('field' => 'fechaPrecentacion', 'label' => 'Fecha de Precentación', 'rules' => 'trim|required'),
            array('field' => 'montoPesos', 'label' => 'Monto en Pesos', 'rules' => 'trim|money'),
            array('field' => 'montoDolares', 'label' => 'Monto en Dólares', 'rules' => 'trim|money'),
            array('field' => 'partidoHechoId', 'label' => 'Partido del Hecho', 'rules' => 'trim|required'),
        );

        return $valid;
    }

    /**
     * Devuelve valores por defecto en un arreglo.
     */
    function valoresPorDefecto() {
        return array(
            'deptoJudicialId' => '',
            'fueroId' => '',
            'usuarioId' => '',
            'fechaInicio' => gmdate('d/m/Y'),
            'lugarActo' => '',
            'descripcion' => '',
            'fechaPrecentacion' => gmdate('d/m/Y'),
            'partidoHechoId' => '',
            'montoPesos' => '0.00',
            'montoDolares' => '0.00',
            'finalizada' => gmdate('d/m/Y'),
            'valoracion' => '',
            'observacion' => '',
        );
    }

    /**
     * Devuelve las causas por estudio 
     */
    function getCausasAbiertas($estudioId = '') {
        $this->db->select($this->tabla . '.*');
        $this->db->from($this->tabla);
        $this->db->join('demandados', 'demandados.causaId = ' . $this->tabla . '.id');
        $this->db->join('demandados_x_estudios', 'demandados_x_estudios.demandadoId = demandados.id');

        // subconsulta para ver si la causa no esta finalizada consultando el ultimo estado de la causa estados_x_causas
        //$this->db->where_not_in('(SELECT estadoId FROM ssap_causas_x_estados WHERE causaId =  ssap_' . $this->tabla . '.id ORDER BY id DESC LIMIT 0,1)', array(5, 6, 7, 8));
        $this->db->where($this->tabla . '.finalizada', NULL);

        if ($estudioId != '') {
            $this->db->where('demandados_x_estudios.estudioId', $estudioId);
            $this->db->where('demandados_x_estudios.estado', '1');
        }

        $this->db->group_by($this->tabla . '.id');

        $results = $this->db->get();

        return $results->result_object();
    }

    /**
     * Devuelve las causas por estudio 
     */
    function getCausasFinalizadas($estudioId = '') {
        $this->db->select($this->tabla . '.*');
        $this->db->from($this->tabla);
        $this->db->join('demandados', 'demandados.causaId = ' . $this->tabla . '.id');
        $this->db->join('demandados_x_estudios', 'demandados_x_estudios.demandadoId = demandados.id');

        // subconsulta para ver si la causa no esta finalizada consultando el ultimo estado de la causa estados_x_causas
        //$this->db->where_in('(SELECT estadoId FROM ssap_causas_x_estados WHERE causaId =  ssap_' . $this->tabla . '.id ORDER BY id DESC LIMIT 0,1)', array(5, 6, 7, 8));
        $this->db->where($this->tabla . '.finalizada is not NULL');
        
        if ($estudioId != '') {
            $this->db->where('demandados_x_estudios.estudioId', $estudioId);
        }

        $this->db->group_by($this->tabla . '.id');

        $results = $this->db->get();

        return $results->result_object();
    }

    /**
     * Devuelve las causas si demandados por estudio (AJUSTAR)
     */
    function getCausasSinDemandados($estudioId = '') {
        $this->db->select($this->tabla . '.*');
        $this->db->from($this->tabla);
        $this->db->join('demandados', 'demandados.causaId = ' . $this->tabla . '.id', 'left');
        if ($estudioId != '') {
            $this->db->join('usuarios', 'usuarios.id = ' . $this->tabla . '.usuarioId');
            $this->db->where('usuarios.estudioId', $estudioId);
        }
        $this->db->where('demandados.causaId', NULL);
        $this->db->where($this->tabla . '.finalizada', NULL);

        $results = $this->db->get();

        return $results->result_object();
    }

    /**
     * Devuelve verdadero o falso si puede ver o no la causa (AJUSTAR)
     */
    function puedeVerCausa($causaId, $estudioId, $usuarioId) {
        $this->db->select('demandados.*');
        $this->db->from('demandados');
        $this->db->join('demandados_x_estudios', 'demandados_x_estudios.demandadoId = demandados.id');
        $this->db->where('demandados.causaId', $causaId);
        $this->db->where('demandados_x_estudios.estudioId', $estudioId);

        $results = $this->db->get();
        $results = $results->result_object();

        $return = false;
        if (!empty($results)) {
            $return = true;
        } else {
            $this->db->select('*');
            $this->db->from('causas');
            $this->db->where('id', $causaId);
            $this->db->where('usuarioid', $usuarioId);

            $results = $this->db->get();
            $results = $results->result_object();
            if (!empty($results)) {
                $return = true;
            }
        }

        return $return;
    }

    /**
     * Devuelve una lista con todas las causas segun la busqueda
     */
    function buscarXCausa($causaId, $caratula, $nroExpediente) {
        $this->db->select('causas.id causaId, causas.fechaInicio, demandados.id, demandados.defendido, demandados.subsidiado, medicos.matricula, medicos.nombre, medicos.numeroDoc');
        $this->db->from($this->tabla);
        $this->db->join('demandados', 'demandados.causaId = ' . $this->tabla . '.id');
        $this->db->join('medicos', 'medicos.matricula = demandados.matricula');
        $this->db->join('caratulas', 'caratulas.causaId = ' . $this->tabla . '.id');

        //$this->db->where_not_in('(SELECT estadoId FROM ssap_causas_x_estados WHERE causaId =  ssap_' . $this->tabla . '.id ORDER BY id DESC LIMIT 0,1)', array(5, 6, 7, 8));
        $this->db->where($this->tabla . '.finalizada', NULL);

        if ($causaId != '') {
            $this->db->where($this->tabla . '.id', $causaId);
        }

        if ($caratula != '') {
            $this->db->where('caratulas.nombre like', '%' . $caratula . '%');
        }

        if ($nroExpediente != '') {
            $this->db->where('caratulas.nroExpediente like', '%' . $nroExpediente . '%');
        }

        $this->db->group_by('demandados.id');

        $results = $this->db->get();

        return $results->result_object();
    }

    /**
     * Devuelve una lista con todas las causas segun la busqueda
     */
    function buscarXDemandado($matricula, $numeroDoc, $nombre) {
        $this->db->select('causas.id causaId, causas.fechaInicio, demandados.id, demandados.defendido, demandados.subsidiado, medicos.matricula, medicos.nombre, medicos.numeroDoc');
        $this->db->from($this->tabla);
        $this->db->join('demandados', 'demandados.causaId = ' . $this->tabla . '.id');
        $this->db->join('medicos', 'medicos.matricula = demandados.matricula');
        $this->db->join('caratulas', 'caratulas.causaId = ' . $this->tabla . '.id');

        //$this->db->where_not_in('(SELECT estadoId FROM ssap_causas_x_estados WHERE causaId =  ssap_' . $this->tabla . '.id ORDER BY id DESC LIMIT 0,1)', array(5, 6, 7, 8));
        $this->db->where($this->tabla . '.finalizada', NULL);

        if ($matricula != '') {
            $this->db->where('demandados.matricula', $matricula);
        }

        if ($numeroDoc != '') {
            $this->db->where('medicos.numeroDoc', $numeroDoc);
        }

        if ($nombre != '') {
            $this->db->where('medicos.nombre like', '%' . $nombre . '%');
        }

        $this->db->group_by('demandados.id');

        $results = $this->db->get();

        return $results->result_object();
    }

    /**
     * Devuelve una lista con todas las causas segun la busqueda
     */
    function buscarXDemandadoId($id) {
        $this->db->select('causas.id causaId, demandados.id, demandados.defendido, demandados.subsidiado, medicos.matricula, medicos.nombre, medicos.numeroDoc');
        $this->db->from($this->tabla);
        $this->db->join('demandados', 'demandados.causaId = ' . $this->tabla . '.id');
        $this->db->join('medicos', 'medicos.matricula = demandados.matricula');
        $this->db->join('caratulas', 'caratulas.causaId = ' . $this->tabla . '.id');

        //$this->db->where_not_in('(SELECT estadoId FROM ssap_causas_x_estados WHERE causaId =  ssap_' . $this->tabla . '.id ORDER BY id DESC LIMIT 0,1)', array(5, 6, 7, 8));
        $this->db->where($this->tabla . '.finalizada', NULL);

        $this->db->where('demandados.id', $id);

        $this->db->group_by('demandados.id');

        $results = $this->db->get();

        $results = $results->result_object();
        return $results[0];
    }

}